package com.context;

import com.alibaba.ttl.TransmittableThreadLocal;

import java.math.BigInteger;
import java.util.Optional;

public final class ManagerContext {

   //创建一个本地的静态线程
    private static final ThreadLocal<ManagerInfoDTO> USER_THREAD_LOCAL = new TransmittableThreadLocal<>();

    /**
     * 设置管理员信息至上下文
     * @param user 用户详情信息
     */
    public static void setUser(ManagerInfoDTO user) {
        USER_THREAD_LOCAL.set(user);
    }

    /**
     * 从上下文中获取管理员 ID
     * @return 管理员 ID
     */
    public static Long getManagerId() {
        ManagerInfoDTO managerInfoDTO = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(managerInfoDTO).map(ManagerInfoDTO::getManagerId).orElse(null);
    }

    /**
     * 从上下文中获取管理员名字
     * @return 管理员名称
     */
    public static String getUsername() {
        ManagerInfoDTO managerInfoDTO = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(managerInfoDTO).map(ManagerInfoDTO::getUsername).orElse(null);
    }

    /**
     * 清理用户上下文
     */
    public static void removeUser() {
        USER_THREAD_LOCAL.remove();
    }
}
